home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
Symbol.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-05
|
1KB
|
73 lines
#ifdef __GNUG__
#pragma implementation
#endif
#include "Symbol.h"
#include "Class.h"
#include "String.h"
//---- SymbolTable -------------------------------------------------------------
static SymbolTable gSymTab;
char **SymbolTable::table;
NewMetaImpl(SymbolTable,Object, (TSP(table)));
SymbolTable::SymbolTable()
{
}
SymbolTable::~SymbolTable()
{
if (table) {
for (int i= 1; table[i]; i++)
SafeDelete(table[i]);
SafeDelete(table);
}
}
u_int SymbolTable::Lookup(char *name)
{
if (table && name)
for (int i= 0; table[i]; i++)
if (strcmp(table[i], name) == 0)
return (u_int) table[i];
return 0;
}
u_int SymbolTable::MakeId(char *name)
{
if (name) {
if (table == 0)
table= new char* [300];
for (int i= 0; table[i]; i++)
if (strcmp(table[i], name) == 0)
break;
if (table[i] == 0)
table[i]= strsave(name);
return (u_int) table[i];
}
return 0;
}
//---- Symbol ------------------------------------------------------------------
IStream& Symbol::ReadFrom(IStream &s)
{
char name[200];
s >> name;
id= SymbolTable::MakeId(name);
return s;
}
SimpleMetaImpl(Symbol)
{
len= len;
if (! isptr)
sprintf(buf, "%s", ((Symbol*)addr)->AsString());
}